package com.young.ums.service;

import com.young.common.util.Page;
import com.young.ums.model.Navigate;
import com.young.ums.model.RoleNavigate;
import java.util.List;

/**
* 角色资源服务接口
* Created by imrookie on 2018-10-9.
*/
public interface IRoleNavigateService {

    /**
    * 查询
    * @param obj
    * @return
    */
    List<RoleNavigate> getList(RoleNavigate obj);

    /**
    * 分页查询
    * @param obj
    * @param page
    * @return
    */
    List<RoleNavigate> getPage(RoleNavigate obj, Page page);

    /**
    * 查询单条
    * @param id
    * @return
    */
    RoleNavigate get(String id);

    /**
    * 统计数量
    * @param obj
    * @return Integer 满足xx条件的数据有多少条
    */
    int count(RoleNavigate obj);

    /**
    * 修改
    * @param obj
    * @return
    */
    int update(RoleNavigate obj);

    /**
    * 删除
    * @param id
    * @return
    */
    int delete(String id);

    /**
    * 批量删除
    * @param idArr
    * @return
    */
    int delete(String[] idArr);

    /**
     * 删除角色下所有的关联关系
     * @param roleId 角色id
     * @return
     */
    int deleteByRoleId(String roleId);

    /**
     * 删除指定资源id关联的信息
     * @param navigateId 资源id
     * @return
     */
    int deleteByNavigateId(String navigateId);

    /**
    * 插入
    * @param obj
    * @return
    */
    int insert(RoleNavigate obj);

    /**
    * 批量插入
    * @param list
    * @return
    */
    int batchInsert(List<RoleNavigate> list);

    /**
     * 根据角色id查询关联的资源信息列表
     * @param roleIds 角色数组
     * @return
     */
    List<Navigate> getNavigateListByRole(String[] roleIds);

    /**
     * 根据角色id查询关联的菜单类型资源列表
     * @param roleIds 角色数组
     * @return
     */
    List<Navigate> getMenuNavigateListByRole(String[] roleIds);

    /**
     * 根据角色id查询关联的uri类型资源列表
     * @param roleIds 角色数组
     * @return
     */
    List<Navigate> getUriNavigateListByRole(String[] roleIds);

    /**
     * 根据资源id查询关联的角色id数组
     * @param navigateId 资源id
     * @return
     */
    String[] getRoleIdsByNavigateId(String navigateId);

    /**
     * 根据角色id查询关联的资源id数组
     * @param roleId 角色id
     * @return
     */
    String[] getNavigateIdsByRoleId(String roleId);

    /**
     * 获取资源授权树,对角色已关联的资源进行标记
     * @param roleId
     * @return
     */
    List<Navigate> getNavigateListAboutGrantAuth(String roleId);

    /**
     * 批量关联资源(N)到角色(1)
     * @param roleId 角色id
     * @param navigateIds 资源id数组
     * @return
     */
    int relevanceNavigates2Role(String roleId, String[] navigateIds);

    /**
     * 判断指定角色和资源是否已经关联
     * @param roleId 角色id
     * @param navigateId 资源id
     * @return
     */
    boolean isRelevanced(String roleId, String navigateId);

    /**
     * 判断指定角色集合是否包含xx资源的关联,存在一个角色有关联就返回true
     * @param roleIds 角色id数组
     * @param navigateId 资源id
     * @return
     */
    boolean hasRelevanced(String[] roleIds, String navigateId);
}